// 创建和更新记录
// 1.以openid为用户id来添加更新删除数据（更改同一条数据）
// 2.包含所有邮卡、更新时间、随机奖品

// 云函数入口文件
const cloud = require('wx-server-sdk');

cloud.init();

const db = cloud.database();
const col = db.collection('post_scan');
const _ = db.command;

// 云函数入口函数
exports.main = async (event, context) => {
  const wxContext = cloud.getWXContext();

  // 查询该用户在数据库中的记录
  let user = await col.where({
    '_openid': wxContext.OPENID,
  }).get();

  // 随机邮字
  let rand = Math.random();
  let type;
  switch (true) {
    case (rand < 0.3):
      type = 0;
      break;
    case (rand < 0.6 && rand >= 0.3):
      type = 1;
      break;
    case (rand < 0.9 && rand >= 0.6):
      type = 2;
      break;
    case (rand >= 0.9):
      type = 3;
      break;
  }

  // 用户记录长度为0，代表第一次，使用add操作
  if(user.data.length == 0){

    let words = [
      { name: '邮家货', type: 0, number: 0 },
      { name: '邮薪贷', type: 1, number: 0 },
      { name: '邮学贷', type: 2, number: 0 },
      { name: '邮掌柜', type: 3, number: 0 }
    ];

    // 控制随机一个字 +1
    words[type].number += 1;

    let data = {
      '_openid': wxContext.OPENID,
      'words': words,
      updateTime: '2019-1-7',
      times: 8,
      prize: null
    }

    // await 保证数据添加到数据库后再跳转更新到前端 防止跳转到前端时没数据显示 
    let res = await col.add({
      data: data
    })

    return {
      msg: '添加成功',
      result: res,
      type: type,    // 作为对应邮卡的标识
      success: true
    }
  }else{
    // 除第一次外，都是更新操作
    user = user.data[0];
    if(user.times <= 0 && user.updateTime == getDay()){
      return {
        msg: '今天次数已经用完了，明天继续~~',
        success: false
      }
    }
    // time代表剩余的次数，在第二天时重置
    let times;
    if(user.updateTime !== getDay()){
      times = 8;
    }
    // 增加一个
    user.words[type].number += 1;
    let res = await col.where({
      '_openid': wxContext.OPENID,
    }).update({
      data: {
        'words': user.words,
        // 可扫次数
        'times': times || _.inc(-1),
        // 获取今天的日期
        'updateTime': getDay()
      }
    });
    return {
      msg: '修改成功',
      success: true,
      result: res,
      type: type    // 作为对应邮卡的标识
    }
  }

}

function getDay(){
  let d = new Date();
  return d.getFullYear() + '-' + (d.getMonth()+1) + '-' + d.getDate();
}